接續昨天的內容,還剩最後一點補充。然後順帶偷渡一點第三章─ Resource Management 的前言介紹XD
昨天提到copying function兩者都需要注意有完整的copy到內容,你也有可能會發現─ copy assignment與copy assign operator,兩者通常長得很像,看到這種類似的內容,你可能會想讓他們其中一個去call另外一個來避免duplicated code,但是,不要衝動!!
copy assignment operator去call copy constructor是不合理的,反之也是。為什麼呢?首先如果copy assignment operator去call copy constructor,你會變成去construct一個已經存在的東西。書本沒有舉例,也不想舉例XD 總之只要類似的嘗試就是錯的,
這邊想傳達的就是這個概念。而反過來也是,因為constructor會初始化新的物件,但copy assignment operator是針對已經存在的物件來做事,所以千萬不要試圖對還沒初始畫過的東西來做初始化的物件做的事。
那如果真的想要讓他們共用程式要怎麼做呢?一樣,再另外弄一個function來讓他們兩個去call,而這也很常見,通常會是叫init
的private function。這才是避免copy functions duplicated code的安全作法。
貼心重點提醒:
- Copying functions should be sure to copy all of an object's data members and all of its base class parts.
- Don't try to implement one of the copying functions in terms of the other. Instead, put common functionality in a third function that both call.
而第二章也到這邊結束了,YA!
過了大半月才終於進入到第三章─Resource Management。
C++程式裡面會有哪些"資源"呢?第一個會想到的可能就是memory,畢竟一開始學C++就會學到動態記憶體配置;不過除了memory,其實還有各種resource,包含file descriptors、mutex lock、GUI的fonts跟brushes、data base connections、network sockets...等等。
要管理資源固然麻煩,但若沒有管理好,後續更是後患無窮,所以管理好他們是必須的。這個章節首先會從C++中constructor、destructor與copying operations的運用開始,接著則是其他設計用來管理資源物件的必須注意事項。明天就開始看看如何管理資源吧!
To be continued...